
package com.gustozzi.distribucion.negocio.impl;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;

import com.gustozzi.distribucion.dao.TransporteDAO;
import com.gustozzi.distribucion.dao.impl.TransporteDAOImpl;
import com.gustozzi.distribucion.dao.util.DataAccess;
import com.gustozzi.distribucion.dao.util.DataAccessExceptions;
import com.gustozzi.distribucion.negocio.TransporteBO;
import com.gustozzi.domain.SolicitudTransporte;
import com.gustozzi.domain.ReservaTransporte;
import com.gustozzi.domain.Transporte;

public class TransporteBOImpl implements TransporteBO
{

    DataAccess transaccionTransporte = new DataAccess("java:comp/env/jdbc/Distribucion");
    TransporteDAO solicitudtransporteDAO = new TransporteDAOImpl(transaccionTransporte);
    SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/mm/yyyy", new Locale("es", "ES"));
    TransporteDAO transporteDAO = new TransporteDAOImpl(transaccionTransporte);

    @Override
    public List<SolicitudTransporte> obtenerListaSolicitudTransporte(String codigo, String centro, String despacho,
            String placa, String fechaDesde, String fechaHasta) throws DataAccessExceptions
    {

        List<SolicitudTransporte> listaDespacho = null;
        int codigoDespacho = -1;
        int codigoCentro = -1;
        Date desde = null;
        Date hasta = null;
        try
        {
            if (!fechaDesde.equalsIgnoreCase(""))
            {
                desde = new Date(sdf.parse(fechaDesde).getTime());
                hasta = new Date(sdf.parse(fechaHasta).getTime());
            }
            listaDespacho = solicitudtransporteDAO.obtenerListaSolicitudTransporte(codigo, centro, despacho, placa,
                    desde, hasta);
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }

        return listaDespacho;
    }

    @Override
    public List<Transporte> obtenerDetalleSolicitud(String codigoSolicitud) throws DataAccessExceptions
    {

        List<Transporte> listaTransporte = null;

        try
        {

            listaTransporte = solicitudtransporteDAO.obtenerListaTransporte(codigoSolicitud);
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return listaTransporte;
    }

    @Override
    public List<Transporte> obtenerListaTransporteReserva() throws DataAccessExceptions
    {

        List<Transporte> listaTransporte = null;

        try
        {

            listaTransporte = transporteDAO.obtenerListaTransporteReserva();
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return listaTransporte;
    }

    @Override
    public List<ReservaTransporte> obtenerReservaTransporte(String codigo, String fechaReservadesde,
            String fechaReservahasta, String placa) throws DataAccessExceptions
    {

        List<ReservaTransporte> listaReservaTransporte = null;
        int codigoReservaTransporte = 0;
        Date desde = null;
        Date hasta = null;
        SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("dd/mm/yyyy");
        try
        {
            if (!codigo.equalsIgnoreCase(""))
            {
                codigoReservaTransporte = Integer.parseInt(codigo);
            }

            if (!fechaReservadesde.equalsIgnoreCase(""))
            {
                desde = new Date(sdf2.parse(fechaReservadesde).getTime());
                hasta = new Date(sdf2.parse(fechaReservahasta).getTime());
            }

            listaReservaTransporte = transporteDAO.obtenerListaReservaTransporte(codigoReservaTransporte, desde, hasta,
                    placa);
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return listaReservaTransporte;

    }

    @Override
    public String guardarReservaTransporte(String codigoReserva, String codigoUnidad, String fecRequerimiento,
            String fecReserva) throws DataAccessExceptions
    {
        int codReserva = 0;
        int codUnidad = 0;
        String respuesta = "";

        try
        {
            if (!codigoReserva.equals("TEMP"))
            {
                codReserva = Integer.parseInt(codigoReserva);
            }
            else
                codReserva = 0;
            if (!codigoUnidad.equalsIgnoreCase(""))
            {
                codUnidad = Integer.parseInt(codigoUnidad);
            }

            respuesta = transporteDAO.guardarReservaTransporte(codReserva, codUnidad, fecRequerimiento, fecReserva);

        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return respuesta;
    }

    @Override
    public String guardarTransporte(String codigo, String codigoCentro, String codigoChofer, String placa,
            String color, String kilometros, String peso, String modelo, String fechaRequerimiento)
            throws DataAccessExceptions
    {
        int codigoTransporte = -1;
        int codigoCentroDis = -1;
        int codChofer = -1;
        int km = -1;
        double pesoMax = 0.0;
        Date desde = null;
        String respuesta = "";

        try
        {
            if (!codigo.equals("TEMP"))
            {
                codigoTransporte = Integer.parseInt(codigo);
            }
            else
                codigoTransporte = 0;
            if (!codigoChofer.equalsIgnoreCase(""))
            {
                codChofer = Integer.parseInt(codigoChofer);
            }

            if (!codigoCentro.equalsIgnoreCase(""))
            {
                codigoCentroDis = Integer.parseInt(codigoCentro);
            }

            if (!peso.equalsIgnoreCase(""))
            {
                pesoMax = Double.parseDouble(peso);
            }
            if (!kilometros.equalsIgnoreCase(""))
            {
                km = Integer.parseInt(kilometros);
            }
            System.out.println("FechaRequerimiento:::::" + fechaRequerimiento);
            respuesta = transporteDAO.guardarTransporte(codigoTransporte, codigoCentroDis, codChofer, placa, color, km,
                    pesoMax, modelo, fechaRequerimiento);

        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return respuesta;
    }

    @Override
    public String eliminarTransporte(String codigo) throws DataAccessExceptions
    {
        String respuesta;
        try
        {
            respuesta = transporteDAO.eliminarTransporte(Integer.parseInt(codigo));
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return respuesta;
    }

    @Override
    public String eliminarReservaTransporte(String codigo) throws DataAccessExceptions
    {
        String respuesta;
        try
        {
            respuesta = transporteDAO.eliminarReservaTransporte(Integer.parseInt(codigo));
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return respuesta;
    }

    public List<Transporte> obtenerListaTransporte(String codigo, String codigoChofer, String codigoCentroDistribucion,
            String placa, String fechaDesde, String fechaHasta) throws DataAccessExceptions
    {
        List<Transporte> listaTransporte = null;
        int codigoTransporte = 0;
        int codigoCentro = 0;
        int codChofer = 0;
        Date desde = null;
        Date hasta = null;

        try
        {
            if (!codigo.equalsIgnoreCase(""))
            {
                codigoTransporte = Integer.parseInt(codigo);
            }
            if (!codigoChofer.equalsIgnoreCase(""))
            {
                codChofer = Integer.parseInt(codigoChofer);
            }

            if (!fechaDesde.equalsIgnoreCase(""))
            {
                desde = new Date(sdf.parse(fechaDesde).getTime());
                hasta = new Date(sdf.parse(fechaHasta).getTime());
            }

            if (!codigoCentroDistribucion.equalsIgnoreCase(""))
            {
                codigoCentro = Integer.parseInt(codigoCentroDistribucion);
            }

            listaTransporte = transporteDAO.obtenerListaTransporte(codigoTransporte, codigoCentro, codChofer, placa,
                    desde, hasta);
        }
        catch (Exception e)
        {
            throw new DataAccessExceptions();
        }
        return listaTransporte;
    }

}
